home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CD ROM Paradise Collection 4
/
CD ROM Paradise Collection 4 1995 Nov.iso
/
program
/
swagg_m.zip
/
GRAPHICS.SWG
/
0142_JPEG-JFIF Height & Width.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1995-03-03
|
2KB
|
72 lines
{
> I've asked this question before, in several message areas, but
> have still to get an answer.. I need to be able to get the size
> and colors from a JPEG/JFIF image file.. Nothing more, nothing
> less... Structures would do, regardless of language (C, Asm,
> Pas, Basic). Anyone?
Here it is (not fully tested, only extracts height and width of the picture!)
}
Procedure GetJpegInfo(FName : String; VAR IsJpeg: Boolean; VAR Height,
Width : Word);
{Checks if file FName is a (true) JPEG/JFIF file and extracts
height and width (in pixels) of the picture}
Const
JFIFS : String[4] = #$FF + #$D8 + #$FF + #$E0;
{JFIF marker: $FF SOI $FF App0}
Var F : File;
ReadS : String;
ARead : Word;
Count : Integer;
begin
Assign(F,FName);
Reset(F,1);
Blockread(F, ReadS[1], 255, Aread);
ReadS[0] := Chr(Aread);
Close(F);
IsJpeg := FALSE;
{Search for JFIF marker in first 255 bytes of the file.
If NOT found, then you can safely assume the file isn't
a (real) JPEG/JFIF file}
if Pos(JFIFS, ReadS) > 0 then
begin
If (Copy(ReadS, Pos(JFIFS,ReadS)+Length(JFIFS)+2,5) = 'JFIF'+#0) then
begin
{We have a JPEG/JFIF File!}
IsJpeg := TRUE;
{Search for SOF marker}
Count := 0;
Repeat
inc(Count);
Until (Count > length(ReadS)) OR
(ReadS[Count] in [#192..#207]);
if Count <= Length(ReadS) then
begin
{ ReadS[Count] = first SOF marker
Count + 1 = length high byte \ length of APP0 data!
Count + 2 = length low byte /
Count + 3 = data precision - colors (?)
Count + 4 = height high byte \ heigth of picture
Count + 5 = height low byte /
Count + 6 = width high byte \ width of picture
Count + 7 = width low byte /
}
Height := Word(Ord(ReadS[Count+4])*256) + Ord(ReadS[Count+5]);
Width := Word(Ord(ReadS[Count+6])*256) + ord(ReadS[Count+7]);
end;
end;
end;
end;